package haha.life.normal;

import com.alibaba.fastjson.JSONObject;
import jzqb.po.DynamicNewsPo;

import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;

/**
 * Description:
 *
 * @author BaiGe
 * @date: 2021/5/24 14:12
 * @Version 1.0
 */
public class RecFileUtils {

    /**
     * 生成REC文件--动态新闻
     *
     * @param tyep:add,edit
     * @param dynamicNewsPo:前端模型
     * @return REC字符串
     */
    public static String generateRecFileOfDynamicNews(String tyep, DynamicNewsPo dynamicNewsPo) throws UnsupportedEncodingException {
        String jsonStr = FileUtil.readJsonFile("dynamicNews.json");
        JSONObject jsonObject = JSONObject.parseObject(jsonStr);

        //定义返回结果
        String RECfile = "";

        String nowStr = RandomUtils.nowStr("");
        if (tyep == "add") {
            RECfile = "<REC>";
            //记录添加时间
            RECfile = RECfile + "<创建时间>=" + nowStr;
            //新建时,更新时间默认等于新建时间
            RECfile = RECfile + "<更新时间>=" + nowStr;
        } else if (tyep == "edit") {
            RECfile = "<REC>" + "<ID>=" + dynamicNewsPo.getId();
            //记录数据更新时间
            RECfile = RECfile + "<更新时间>=" + nowStr;
        }

        //遍历前端对象,重映射key
        Field[] fields = dynamicNewsPo.getClass().getDeclaredFields();
        for (int i = 0, len = fields.length; i < len; i++) {
            // 对于每个属性，获取属性名
            String varName = fields[i].getName();
            try {
                // 获取原来的访问控制权限
                boolean accessFlag = fields[i].isAccessible();
                // 修改访问控制权限
                fields[i].setAccessible(true);
                // 获取在对象f中属性fields[i]对应的对象中的变量
                Object o;
                try {
                    o = fields[i].get(dynamicNewsPo);
                    try {
                        varName = jsonObject.get(varName).toString();
                        RECfile += String.format("<%s>=%s", varName, o);
                    } catch (NullPointerException e) {
                        continue;
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                // 恢复访问控制权限
                fields[i].setAccessible(accessFlag);
            } catch (IllegalArgumentException ex) {
                ex.printStackTrace();
            }
        }
        String finalRECfile=RECfile.replaceAll("null", "");
        return finalRECfile;
    }
}
